//
//  CZPictureView.swift
//  git
//
//  Created by 徐 鹏超 on 16/4/12.
//  Copyright © 2016年 徐 鹏飞. All rights reserved.
//

import UIKit

/// 视图距离左右的间距
let CZPictureViewMargin: CGFloat = 10
/// 视图cell的间距
let CZPictureItemMargin: CGFloat = 5
/// cell宽高
let CZPictureItemWH = (UIScreen.mainScreen().bounds.width - 2*CZPictureViewMargin - 2*CZPictureItemMargin) / 3

let CZPictureViewReuseIdentifier = "CZPictureViewReuseIdentifier"

class CZPictureView: UICollectionView , UICollectionViewDataSource{
    var pic_urls: [CZPictureModel]?{
        
        didSet{
            let size = calSize()
            // 为什么在赋值以后更新
            self.snp_updateConstraints { (make) -> Void in
                make.size.equalTo(size)
            }
            
            // 赋值之后一定要记得 刷新UI
            reloadData()
        }
        
        
        
        
    }
    
    // 根据图片的数量,来显示不同的大小
    private func calSize() -> CGSize{
        /*
        1张图片的时候,返回 图片的宽高
        4张图片的时候,返回 宽高 -> 2*图片的高或高 + 图片的间距
        
        2,3张图片的时候,返回 宽度: 屏幕的宽度 - 2*视图的间距
        高度: 1 * 图片的宽或高
        
        5,6                 宽度: 屏幕的宽度 - 2*视图的间距
        高度: 2 * 图片的宽或高 + 1*图片的间距
        
        7,8,9               高度: 3 * 图片的宽或高 + 2*图片的间距
        
        */
        guard let count = pic_urls?.count else {
            return CGSizeZero
        }
        
        switch count {
            
        case 1: return CGSizeMake(CZPictureItemWH, CZPictureItemWH)
        case 4: return CGSizeMake(2*CZPictureItemWH + CZPictureItemMargin, 2*CZPictureItemWH + CZPictureItemMargin)
        case 2,3:return CGSizeMake(UIScreen.mainScreen().bounds.width - 2*CZPictureViewMargin, 1*CZPictureItemWH + 0*CZPictureItemMargin)
        case 5,6:return CGSizeMake(UIScreen.mainScreen().bounds.width - 2*CZPictureViewMargin, 2*CZPictureItemWH + 1*CZPictureItemMargin)
        case 7,8,9: return CGSizeMake(UIScreen.mainScreen().bounds.width - 2*CZPictureViewMargin, 3*CZPictureItemWH + 2*CZPictureItemMargin)
        default: return CGSizeZero
        }
        
        //        return CGSizeMake(250, 150)
    }
    
    
    let flowLayout = UICollectionViewFlowLayout()
    
    override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
        super.init(frame: frame, collectionViewLayout: flowLayout)
        
        setupUI()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    private func setupUI(){
        
        // UICollectionView
        dataSource = self
        
        // 注册cell 第一步: 先注册一个cell
        self.registerClass(CZPictureCollectionViewCell.self, forCellWithReuseIdentifier: CZPictureViewReuseIdentifier)
        
        // cell的尺寸改 布局
        flowLayout.itemSize = CGSizeMake(CZPictureItemWH, CZPictureItemWH)
        // 改间距
        flowLayout.minimumInteritemSpacing = CZPictureItemMargin
        flowLayout.minimumLineSpacing = CZPictureItemMargin
        
    }
    
    
}

extension CZPictureView{
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        // 注册cell 第二步: 直接从重用cell里,拿出一个 肯定存在的cell
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(CZPictureViewReuseIdentifier, forIndexPath: indexPath) as! CZPictureCollectionViewCell
        
        cell.backgroundColor = UIColor.redColor()
        // 强制解包会不会出错? 答案是 不会!
        // 为什么不会? return pic_urls?.count ?? 0
        cell.pic_url = pic_urls![indexPath.item]
        
        return cell
    }
    
    
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return pic_urls?.count ?? 0
    }
}


class CZPictureCollectionViewCell: UICollectionViewCell {
    
    var pic_url: CZPictureModel?{
        
        // OC 里经常用的 set方法
        didSet{
            
            let url = NSURL(string: pic_url?.thumbnail_pic ?? "")
            iconImageView.sd_setImageWithURL(url)
        }
        
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        setupUI()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    private func setupUI(){
        
        addSubview(iconImageView)
        
        // img 设置frame
        iconImageView.frame = self.bounds
        
    }
    
    //MARK:--懒加载
    private lazy var iconImageView : UIImageView = {
        
        let img = UIImageView()
        
        return img
    }()
    
}








